package com.trolls.client;

import java.util.ArrayList;

import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.ui.HasVerticalAlignment;
import com.google.gwt.user.client.ui.Image;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.PushButton;


public class CompositeGalleryImg extends Gallery {
	
/////////////////////VARIABLES GLOBALES///////////////////////////////////////////////////////////

	// Fichier contenant les noms des images à afficher
	private ArrayList<Item> items;
	// Déclaration des panels et boutons
	private PushButton buttonPrecedent = new PushButton(new Image(GWT.getHostPageBaseURL()+"images/util/previous.png"));
	private PushButton buttonSuivant = new PushButton(new Image(GWT.getHostPageBaseURL()+"images/util/next.png"));
	private HorizontalPanel sPanel = new HorizontalPanel();
	private HorizontalPanel sPanelImg = new HorizontalPanel();

		/**
		 * Configure une image mignature
		 * @return Image
		 */
	private Image configImg(final Image img,final Item item, final int position) {
		img.addStyleName("pc-template-img");
		img.setWidth("100px");
		img.setHeight("140px");
		img.setTitle(item.getName());
		img.setAltText(item.getName());
		sPanelImg.add(img);
		if(position == getPositionSelected()){
			img.setStyleName("itemSelected");
		}
		img.addClickHandler(new ClickHandler() {
			public void onClick(ClickEvent event) {
				item.afficher(LaTerreDesTrolls.get().getContent());
				if (getNumSelectedWidget()!= -1 ){
					sPanelImg.getWidget(getNumSelectedWidget()).setStyleName("pc-template-img");
				}
				setPositionSelected(position);
				img.addStyleName("itemSelected");

			}
			
		});
		
		return img;

	}
	
/////////////////////CONSTRUCTEUR DE LA GALERIE D'IMAGE/////////////////////////////////////////
	
	/**
	 * Constructeur de la gallerie et initialisation du la première image affiché
	 * @param ArrayList<Item> list
	 */
	
	public CompositeGalleryImg(final ArrayList<Item> listItems){
		super(5, listItems.size());
		position = NB_ITEM_MAX - 1;
		config(listItems);

		// Initialisation du fichier
		// We can add style names
		
	}

	public CompositeGalleryImg(ArrayList<Item> listItems, Troll troll) {
		super(5, listItems.size());
		positionSelected  = listItems.indexOf(troll);
		System.out.println(positionSelected);
		position = listItems.indexOf(troll)+NB_ITEM_MAX-1;

		config(listItems);
		
		// TODO Auto-generated constructor stub
	}
	private void config(ArrayList<Item> listItems){
		items = listItems;
		buttonPrecedent.addStyleName("btn_next");
		buttonSuivant.addStyleName("btn_next");
		sPanelImg.addStyleName("sPanelImg"); 
		//On prepare le pointeur pour l'affichage
		for (int i=0;i<NB_ITEM_MAX;i++){
			precedent();
		}
		//On Affiche la liste
		for (int i = 0; i < NB_ITEM_MAX; i++) {
			int numItem =getSuivant();
			Item item = items.get(numItem);
			Image img = new Image(item.getImagePath());
			img = configImg(img, item,numItem);
		}

		// insertion des élements du sPanel
		sPanel.setHeight("255px");
		sPanel.setStylePrimaryName("gallery_sPanel");
		sPanel.setVerticalAlignment(HasVerticalAlignment.ALIGN_MIDDLE);
		// ajout des boutons(et événements) de Precedent et Suivant selon qu'on ai besoin d'eux
		if (NB_ITEM>NB_ITEM_MAX){
			sPanel.add(buttonPrecedent);
			sPanel.add(sPanelImg);
			sPanel.add(buttonSuivant);

			// Evenement du clic sur 'Précédent'
			buttonPrecedent.addClickHandler(new ClickHandler() {
				public void onClick(ClickEvent event) {
					sPanelImg.clear();
					InitPrecedent();
					for (int i = 0; i < NB_ITEM_MAX; i++) {
						int numItem =getSuivant();
						Item item = items.get(numItem);
						Image img = new Image(item.getImagePath());
						img = configImg(img, item,numItem);

					}

				}
			});
			// Evenement du clic sur 'Suivant'
			buttonSuivant.addClickHandler(new ClickHandler() {
				public void onClick(ClickEvent event) {
					sPanelImg.clear();
					InitSuivant();
					for (int i = 0; i < NB_ITEM_MAX; i++) {
						int numItem =getSuivant();
						Item item = items.get(numItem);
						Image img = new Image(item.getImagePath());
						img = configImg(img, item,numItem);
					}

				}
			});
		}else{
			sPanel.add(sPanelImg);
		}
		// Insertion des élements dans le panel Principal
		this.initWidget(sPanel);
	}

}
